package com.lzyyj.common;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.URISyntaxException;
import java.net.URL;
import java.util.Date;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

/** 
 *  @描述:
 *  @作者     : lzyyj
 *  @创建日期 :2016年3月7日 下午4:08:31  
 **/
public class FileUtil {
	
	private static Log log = LogFactory.getLog(FileUtil.class);
	
	/**
	 * 读文件，文本文件
	 *  @描述:
	 *  @方法名称 :readTxtFile
	 *  @作者     :shu jun
	 *  @创建日期 :2014年4月10日 下午4:18:32 
	 *  @param filePath
	 *  @return
	 *
	 */
	public static String readTxtFile(String filePath) {
		try {
			String encoding = "UTF-8";
			File file = new File(filePath);
			if (file.isFile() && file.exists()) { // 判断文件是否存在
				InputStreamReader read = new InputStreamReader(
						new FileInputStream(file), encoding);// 考虑到编码格式
				BufferedReader bufferedReader = new BufferedReader(read);
				String lineTxt = null;
				StringBuilder builder = new StringBuilder("");
				while ((lineTxt = bufferedReader.readLine()) != null) {
					builder.append(lineTxt);
				}
				read.close();
				return builder.toString();
			} else {
				log.error("读取Text：找不到指定的文件"+ filePath);
			}
		} catch (Exception e) {
			e.printStackTrace();
			log.error(e.toString());
		}
		return "";
	}
	
	/**
	 * 写文件
	 *  @描述:
	 *  @方法名称 :writeTxtFile
	 *  @作者     :shu jun
	 *  @创建日期 :2014年4月10日 下午4:25:11 
	 *  @param path
	 *  @param newStr
	 *  @throws IOException
	 *
	 */
	public static void writeTxtFile(String path, String newStr)
			throws IOException {
		try {
			File f = new File(path);
			OutputStreamWriter write = new OutputStreamWriter(new FileOutputStream(f), "utf-8");
			BufferedWriter writer = new BufferedWriter(write);
			writer.write(newStr);
			writer.close();
		} catch (Exception e) {
			e.printStackTrace();
			log.error(e.toString());
		}
	}
	/**
	 * 删除单个文件
	 *  @描述:
	 *  @方法名称 :deleteFile
	 *  @作者     :shu jun
	 *  @创建日期 :2014年4月10日 下午4:36:23 
	 *  @param sPath
	 *  @return
	 *
	 */
	public static boolean deleteFile(String sPath) {
        boolean flag = false;
        File file = new File(sPath);
        if(file.isFile() && file.exists()){
            file.delete();
            flag = true;
        }
        return flag;
    }

	/**
	 * 获取指定路径的全路径名，默认相对路径为web项目的根目录
	 * @param path
	 * @return
	 * @throws URISyntaxException
	 */
	public static String getFullPath(String path) {
		if (path.startsWith(":", 1)){
			// windows 格式绝对路径，
		}else if(path.startsWith("/")){
			// java 格式绝对路径
			
		}else if(path.startsWith("\\")){
			// Windows 格式绝对路径
		}else {
			// 相对路径
			String basePathString = "";
			try {
				URL url = Thread.currentThread().getContextClassLoader().getResource("../../");
				if (url==null){
					url = Thread.currentThread().getContextClassLoader().getResource("");
					basePathString = url.toURI().getPath();
					File file = new File(url.toURI().getPath());
					if (file.exists()&&file.isDirectory()){
						file = new File(file.getParent());
						if (file.exists()&&file.isDirectory()){
							basePathString = file.getParent();
						}
					}
				}else{
					basePathString = url.toURI().getPath();
				}
			} catch (URISyntaxException e) {
				basePathString = "";
				e.printStackTrace();
			}
			path = basePathString + path;
		}
		return path;
	}
	
	/**
	 * 按日期创建目录
	 *  @描述:
	 *  @方法名称 :createPath
	 *  @作者     :shu jun
	 *  @创建日期 :2014年4月10日 下午4:26:48 
	 *  @param root 根目录
	 *  @return 返回存储的位置
	 * @throws Exception 
	 *
	 */
	public static String createPath(String root1) throws Exception{
		String root = getFullPath(root1);
		Date currDate = new Date();
        String months = DateUtil.getDateString(currDate, "yyyyMM");//当前月份
        String days = DateUtil.getDateString(currDate, "dd");
        File file = new File(root);
        if(!file.exists()){
        	file.mkdirs();
        	log.info("创建目录："+file.getAbsolutePath());
        }
        String path = months;
        String dir = root +File.separator+ path;
        file = new File(dir);
        if(!file.exists()){
        	file.mkdirs();
        	log.info("创建目录："+file.getAbsolutePath());
        }
        path += File.separator + days;
        dir = root +File.separator+ path;
        file = new File(dir);
        if(!file.exists()){
        	file.mkdirs();
        	log.info("创建目录："+file.getAbsolutePath());
        }
		return path;
	}
	
    public static void main(String[] args) {  
        try {
			System.out.println("当前目录："+getFullPath(""));
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}  
    }  	
}
